#include<stdio.h>

#define N 100005

int main(void) {

	//数组
	// 	   数组指的是一个一组类型相同的数据，他们的存放是连续的，可以通过下标访问         ！！！从0开始，如果长度是n，最后一项的索引是(n-1)！！！
	// 	   创建数组的操作——创建静态数组(动态后面再学)时必须要指定数组长度，这里必须要用常数，不能用变量名，即使赋值了也不行
	//例子1：
	int n = 10;
	int a[n];		//报错了，不能这样
	//例子2：
	int b[10000];	//按照题目要求选择数组大小
	int arr[N];		//我在include下面写个一句代码，它的意思就是把N的值当作100005，这和赋值是不一样的，这个叫宏定义，N的值不能再更改了，它在整个程序中都是初值，可以看作一个常数，所以这里可以用
	//这里还有个注意点，如果数组开的太大了，编译器会运行不了，但网站里可以，比如1e8这样子大的
	int c[5] = { 0 };	//初始化操作，数组c的5个数全部赋值为0——只有0可以一次全部赋值，其他数不行
	double d[5] = { 0 };//这里也是全部赋值为0
	int e[5] = { 1 };	//注意，这里只有e[0]被赋值为1，e[1]到e[4]没有初始化，无法访问
	double f[4] = { 0,0.1,0.2 };//用逗号隔开，f[0]=0,f[1]=0.1,f[2]=0.2,f[3]没有赋值
	//例子3：
	char c[3] = { 'a','b','+' };//字符型，加引号

	//		假如题目给了一连串的数字，要把它们读入数组
	//		第一种情况，说了有多少个，比如n个
	for (int i = 0; i < n; ++i) {
		scanf_s("%d", *a[i]);
	}
	//		第二种情况，没说有多少个，这时候我们的思路就是，读到没有了，读到没东西读就停，这里就是C语言里面的EOF
	//		此处先引进另一种循环结构while
	int k = 10, sum = 0;
	while (k--) {
		sum += k;
	}
	while (--k) {
		sum += k;
	}
	//		while其实与for很类似，其判断括号里的东西是否为真(True ,1)，如果是真，进入循环运行，如果为假(False, 0)，就终止循环
	//		所以上面的第一段代码实际上计算了9+8+。。+1+0，第二段代码实际上计算了9+8+。。。+1
	//		仔细想一下这里到底为什么从9开始，为什么第一个有0，第二个没有
	//		如果要想计算1+。。。+10，并且使代码可读性更强，可以按照下面写
	while (k > 0) {
		sum += k;
		k--;
	}
	//		回到把数读进数组，按照下面的写
	int n = 0;
	while (scanf_s("%d", &a[n]) != EOF) { n++; }//n控制索引的增加，想一下终止时n的含义是什么
	//		在读取文件里的数据时，由于EOF在文档最后，所以程序可以终止——这就是网站评测的情况
	//		但是在我们自己的编译器里面，你输入1 2 3 4 5 6然后按回车，读取并不会终止，因为编译器不知道你是否结束
	//		需要用<Ctrl + z>组合键然后按 Enter 键——使用3次——的方式来告诉系统已经到了EOF，这样系统才会结束while

	//数组的遍历——就简单的for循环
	for (int i = 0; i < n; i++) {
		printf("%d", &a[i]);
	}
	//数组的修改，赋值即可
	a[2] = 3;
	
	//这里想一下如果我要在数组中间一个地方插入或者删除一个数，怎么操作

	//如果我要交换数组中的a[i]和a[j]怎么操作

	//下面在讲一个do while语句，一般用不到，学会了之后有些题的代码可以简化
	int s = 1;
	int mul = 1;
	do {
		mul *= s;
		s++;
	} while (s <= 10);//计算了10的阶乘
	//其实就是先执行命令，再判断，与while的区别就是判断先后的问题，了解即可
}